ποΈGitΠ―ΡΠ°ποΈ
Node / meshtastic / Meshtastic-Android / files / feature / settings / src / commonMain / kotlin / org / meshtastic / feature / settings / radio / component / TAKConfigItemList.kt
Displaying Raw β’ Download
feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/component/TAKConfigItemList.kt 65a1f5ce4d0e4b8eafcd0bbfccafd41dc6ee888a (65a1f5ce) Text, 22.80 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tf0883e@fileTb4b4b4:Te6edf3SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffModifierMissingTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffParameterNamingTa5d6ff"Tb4b4b4)
Tff7b72package T7ee787org.meshtastic.feature.settings.radio.component
Tff7b72import T7ee787androidx.compose.foundation.background
Tff7b72import T7ee787androidx.compose.foundation.layout.Arrangement
Tff7b72import T7ee787androidx.compose.foundation.layout.Box
Tff7b72import T7ee787androidx.compose.foundation.layout.Column
Tff7b72import T7ee787androidx.compose.foundation.layout.Row
Tff7b72import T7ee787androidx.compose.foundation.layout.fillMaxWidth
Tff7b72import T7ee787androidx.compose.foundation.layout.padding
Tff7b72import T7ee787androidx.compose.foundation.layout.size
Tff7b72import T7ee787androidx.compose.foundation.shape.CircleShape
Tff7b72import T7ee787androidx.compose.material3.Button
Tff7b72import T7ee787androidx.compose.material3.CircularProgressIndicator
Tff7b72import T7ee787androidx.compose.material3.ExperimentalMaterial3Api
Tff7b72import T7ee787androidx.compose.material3.HorizontalDivider
Tff7b72import T7ee787androidx.compose.material3.Icon
Tff7b72import T7ee787androidx.compose.material3.IconButton
Tff7b72import T7ee787androidx.compose.material3.MaterialTheme
Tff7b72import T7ee787androidx.compose.material3.Scaffold
Tff7b72import T7ee787androidx.compose.material3.Text
Tff7b72import T7ee787androidx.compose.material3.TopAppBar
Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.runtime.getValue
Tff7b72import T7ee787androidx.compose.runtime.remember
Tff7b72import T7ee787androidx.compose.runtime.rememberCoroutineScope
Tff7b72import T7ee787androidx.compose.ui.Alignment
Tff7b72import T7ee787androidx.compose.ui.Modifier
Tff7b72import T7ee787androidx.compose.ui.graphics.Color
Tff7b72import T7ee787androidx.compose.ui.unit.dp
Tff7b72import T7ee787androidx.lifecycle.compose.collectAsStateWithLifecycle
Tff7b72import T7ee787kotlinx.coroutines.launch
Tff7b72import T7ee787org.jetbrains.compose.resources.StringResource
Tff7b72import T7ee787org.jetbrains.compose.resources.pluralStringResource
Tff7b72import T7ee787org.jetbrains.compose.resources.stringResource
Tff7b72import T7ee787org.koin.compose.koinInject
Tff7b72import T7ee787org.meshtastic.core.common.BuildConfigProvider
Tff7b72import T7ee787org.meshtastic.core.model.getColorFrom
Tff7b72import T7ee787org.meshtastic.core.model.getStringResFrom
Tff7b72import T7ee787org.meshtastic.core.repository.TakPrefs
Tff7b72import T7ee787org.meshtastic.core.resources.Res
Tff7b72import T7ee787org.meshtastic.core.resources.back
Tff7b72import T7ee787org.meshtastic.core.resources.export_tak_data_package
Tff7b72import T7ee787org.meshtastic.core.resources.tak
Tff7b72import T7ee787org.meshtastic.core.resources.tak_config
Tff7b72import T7ee787org.meshtastic.core.resources.tak_role
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_enabled
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_enabled_desc
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_export_data_package_desc
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_loading
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_mesh_to_cot
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_mesh_to_cot_desc
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_section
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_status
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_status_connected
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_status_failed
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_status_not_running
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_status_off
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_status_starting
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_status_unavailable
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_status_waiting
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_test_card_title
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_test_idle
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_test_protocol_v1_label
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_test_protocol_v2_label
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_test_result_bytes
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_test_result_expected_drop
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_test_result_unknown_error
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_test_results_v2
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_test_run
Tff7b72import T7ee787org.meshtastic.core.resources.tak_server_test_running
Tff7b72import T7ee787org.meshtastic.core.resources.tak_team
Tff7b72import T7ee787org.meshtastic.core.takserver.TAKDataPackageGenerator
Tff7b72import T7ee787org.meshtastic.core.takserver.TAKMeshIntegration
Tff7b72import T7ee787org.meshtastic.core.takserver.TAKServerManager
Tff7b72import T7ee787org.meshtastic.core.takserver.TakMeshTestRunner
Tff7b72import T7ee787org.meshtastic.core.takserver.TakProtocol
Tff7b72import T7ee787org.meshtastic.core.takserver.TakTestResult
Tff7b72import T7ee787org.meshtastic.core.ui.component.DropDownPreference
Tff7b72import T7ee787org.meshtastic.core.ui.component.SwitchPreference
Tff7b72import T7ee787org.meshtastic.core.ui.component.TitledCard
Tff7b72import T7ee787org.meshtastic.core.ui.icon.ArrowBack
Tff7b72import T7ee787org.meshtastic.core.ui.icon.MeshtasticIcons
Tff7b72import T7ee787org.meshtastic.core.ui.icon.PlayArrow
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Share
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.RadioConfigViewModel
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.RebootBehavior
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.ResponseState
Tff7b72import T7ee787org.meshtastic.feature.settings.tak.TakPermissionHandler
Tff7b72import T7ee787org.meshtastic.feature.settings.tak.rememberDataPackageExporter
Tff7b72import T7ee787org.meshtastic.proto.MemberRole
Tff7b72import T7ee787org.meshtastic.proto.ModuleConfig
Tff7b72import T7ee787org.meshtastic.proto.Team
T8b949e// ββ TAK Config Screen (Module Settings) βββββββββββββββββββββββββββββββββββββ
T8b949e// Shows only the firmware module config: team and role dropdowns.
Tf0883e@Composable
Tff7b72fun Td2a8ffTAKConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4: Te6edf3RadioConfigViewModelTb4b4b4, Te6edf3onBackTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3state Tff7b72by Te6edf3viewModelTb4b4b4.Te6edf3radioConfigStateTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3takConfig Tff7b72= Te6edf3stateTb4b4b4.Te6edf3moduleConfigTb4b4b4.Te6edf3tak Tff7b72?: Te6edf3ModuleConfigTb4b4b4.Te6edf3TAKConfigTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3formState Tff7b72= Te6edf3rememberConfigStateTb4b4b4(Te6edf3initialValue Tff7b72= Te6edf3takConfigTb4b4b4)
Tff7b72val Te6edf3effectiveResponseState Tff7b72=
Tff7b72when Tb4b4b4(Te6edf3stateTb4b4b4.Te6edf3responseStateTb4b4b4) Tb4b4b4{
Tff7b72is Te6edf3ResponseStateTb4b4b4.Te6edf3Loading Tff7b72-Tff7b72> Te6edf3ResponseStateTb4b4b4.Te6edf3Empty
Tff7b72else Tff7b72-Tff7b72> Te6edf3stateTb4b4b4.Te6edf3responseState
Tb4b4b4}
Te6edf3RadioConfigScreenListTb4b4b4(
Te6edf3rebootBehavior Tff7b72= Te6edf3RebootBehaviorTb4b4b4.Te6edf3ALWAYSTb4b4b4,
Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3takTb4b4b4)Tb4b4b4,
Te6edf3onBack Tff7b72= Te6edf3onBackTb4b4b4,
Te6edf3configState Tff7b72= Te6edf3formStateTb4b4b4,
Te6edf3enabled Tff7b72= Te6edf3stateTb4b4b4.Te6edf3connectedTb4b4b4,
Te6edf3responseState Tff7b72= Te6edf3effectiveResponseStateTb4b4b4,
Te6edf3onDismissPacketResponse Tff7b72= Te6edf3viewModelTff7b72::Te6edf3clearPacketResponseTb4b4b4,
Te6edf3onSave Tff7b72= Tb4b4b4{
Tff7b72val Te6edf3config Tff7b72= Te6edf3ModuleConfigTb4b4b4(Te6edf3tak Tff7b72= Tffa657itTb4b4b4)
Te6edf3viewModelTb4b4b4.Te6edf3setModuleConfigTb4b4b4(Te6edf3configTb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3item Tb4b4b4{
Te6edf3TakConfigCardTb4b4b4(
Te6edf3team Tff7b72= Te6edf3formStateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3teamTb4b4b4,
Te6edf3role Tff7b72= Te6edf3formStateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3roleTb4b4b4,
Te6edf3enabled Tff7b72= Te6edf3stateTb4b4b4.Te6edf3connectedTb4b4b4,
Te6edf3onTeamSelected Tff7b72= Tb4b4b4{ Te6edf3formStateTb4b4b4.Te6edf3value Tff7b72= Te6edf3formStateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3team Tff7b72= Tffa657itTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onRoleSelected Tff7b72= Tb4b4b4{ Te6edf3formStateTb4b4b4.Te6edf3value Tff7b72= Te6edf3formStateTb4b4b4.Te6edf3valueTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3role Tff7b72= Tffa657itTb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e/** Stateless TAK team/role config card β previewable without DI. */
Tf0883e@Composable
Tff7b72internal Tff7b72fun Td2a8ffTakConfigCardTb4b4b4(
Te6edf3teamTb4b4b4: Te6edf3TeamTb4b4b4,
Te6edf3roleTb4b4b4: Te6edf3MemberRoleTb4b4b4,
Te6edf3enabledTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onTeamSelectedTb4b4b4: Tb4b4b4(Te6edf3TeamTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onRoleSelectedTb4b4b4: Tb4b4b4(Te6edf3MemberRoleTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TitledCardTb4b4b4(Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_configTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3DropDownPreferenceTb4b4b4(
Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_teamTb4b4b4)Tb4b4b4,
Te6edf3enabled Tff7b72= Te6edf3enabledTb4b4b4,
Te6edf3selectedItem Tff7b72= Te6edf3teamTb4b4b4,
Te6edf3itemLabel Tff7b72= Tb4b4b4{ Te6edf3stringResourceTb4b4b4(Te6edf3getStringResFromTb4b4b4(Tffa657itTb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3itemColor Tff7b72= Tb4b4b4{ Te6edf3ColorTb4b4b4(Te6edf3getColorFromTb4b4b4(Tffa657itTb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onItemSelected Tff7b72= Te6edf3onTeamSelectedTb4b4b4,
Tb4b4b4)
Te6edf3HorizontalDividerTb4b4b4(Tb4b4b4)
Te6edf3DropDownPreferenceTb4b4b4(
Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_roleTb4b4b4)Tb4b4b4,
Te6edf3enabled Tff7b72= Te6edf3enabledTb4b4b4,
Te6edf3selectedItem Tff7b72= Te6edf3roleTb4b4b4,
Te6edf3itemLabel Tff7b72= Tb4b4b4{ Te6edf3stringResourceTb4b4b4(Te6edf3getStringResFromTb4b4b4(Tffa657itTb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onItemSelected Tff7b72= Te6edf3onRoleSelectedTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
T8b949e// ββ TAK Server Screen (Settings β Advanced) βββββββββββββββββββββββββββββββββ
T8b949e// App-local TAK server controls: enable/disable, export data package, debug test harness.
T8b949e/**
* Extracted from [TakServerScreen]'s [TakPermissionHandler] callback so tests can drive the exact function production
* calls, rather than duplicating its conditional.
*/
Tff7b72internal Tff7b72fun Td2a8ffhandleTakPermissionResultTb4b4b4(Te6edf3grantedTb4b4b4: Tffa657BooleanTb4b4b4, Te6edf3isTakServerEnabledTb4b4b4: Tffa657BooleanTb4b4b4, Te6edf3takPrefsTb4b4b4: Te6edf3TakPrefsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3granted Tff7b72&Tff7b72& Te6edf3isTakServerEnabledTb4b4b4) Tb4b4b4{
Te6edf3takPrefsTb4b4b4.Te6edf3setTakServerEnabledTb4b4b4(Tff7b72falseTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalMaterial3ApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@Composable
Tff7b72fun Td2a8ffTakServerScreenTb4b4b4(Te6edf3onBackTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3takPrefsTb4b4b4: Te6edf3TakPrefs Tff7b72= Te6edf3koinInjectTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3takServerManagerTb4b4b4: Te6edf3TAKServerManager Tff7b72= Te6edf3koinInjectTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3isTakServerEnabled Tff7b72by Te6edf3takPrefsTb4b4b4.Te6edf3isTakServerEnabledTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3isMeshToCotEnabled Tff7b72by Te6edf3takPrefsTb4b4b4.Te6edf3isMeshToCotEnabledTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3isTakServerRunning Tff7b72by Te6edf3takServerManagerTb4b4b4.Te6edf3isRunningTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3isTakServerStarting Tff7b72by Te6edf3takServerManagerTb4b4b4.Te6edf3isStartingTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3takClientCount Tff7b72by Te6edf3takServerManagerTb4b4b4.Te6edf3connectionCountTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3hasTakServerStartError Tff7b72by Te6edf3takServerManagerTb4b4b4.Te6edf3hasStartErrorTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3takServerStatus Tff7b72=
Te6edf3TakServerStatusTb4b4b4.Te6edf3resolveTb4b4b4(
Te6edf3isSupported Tff7b72= Te6edf3takServerManagerTb4b4b4.Te6edf3isSupportedTb4b4b4,
Te6edf3isEnabled Tff7b72= Te6edf3isTakServerEnabledTb4b4b4,
Te6edf3isRunning Tff7b72= Te6edf3isTakServerRunningTb4b4b4,
Te6edf3isStarting Tff7b72= Te6edf3isTakServerStartingTb4b4b4,
Te6edf3clientCount Tff7b72= Te6edf3takClientCountTb4b4b4,
Te6edf3hasStartError Tff7b72= Te6edf3hasTakServerStartErrorTb4b4b4,
Tb4b4b4)
Tff7b72val Te6edf3exportLauncher Tff7b72= Te6edf3rememberDataPackageExporter Tb4b4b4{ Te6edf3TAKDataPackageGeneratorTb4b4b4.Te6edf3generateDataPackageTb4b4b4(Tb4b4b4) Tb4b4b4}
Te6edf3TakPermissionHandlerTb4b4b4(
Te6edf3isTakServerEnabled Tff7b72= Te6edf3isTakServerEnabledTb4b4b4,
Te6edf3onPermissionResult Tff7b72= Tb4b4b4{ Te6edf3granted Tff7b72-Tff7b72> Te6edf3handleTakPermissionResultTb4b4b4(Te6edf3grantedTb4b4b4, Te6edf3isTakServerEnabledTb4b4b4, Te6edf3takPrefsTb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3ScaffoldTb4b4b4(
Te6edf3topBar Tff7b72= Tb4b4b4{
Te6edf3TopAppBarTb4b4b4(
Te6edf3title Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_serverTb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3navigationIcon Tff7b72= Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onBackTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ArrowBackTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3backTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3actions Tff7b72= Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3isTakServerEnabledTb4b4b4) Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3exportLauncherTb4b4b4(Ta5d6ff"Ta5d6ffMeshtastic_TAK_Server.zipTa5d6ff"Tb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ShareTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3export_tak_data_packageTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4) Tb4b4b4{ Te6edf3padding Tff7b72-Tff7b72>
Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3paddingTb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TakServerSectionTb4b4b4(
Te6edf3isTakServerEnabled Tff7b72= Te6edf3isTakServerEnabledTb4b4b4,
Te6edf3onEnabledChange Tff7b72= Tb4b4b4{ Te6edf3takPrefsTb4b4b4.Te6edf3setTakServerEnabledTb4b4b4(Tffa657itTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3isMeshToCotEnabled Tff7b72= Te6edf3isMeshToCotEnabledTb4b4b4,
Te6edf3onMeshToCotChange Tff7b72= Tb4b4b4{ Te6edf3takPrefsTb4b4b4.Te6edf3setMeshToCotEnabledTb4b4b4(Tffa657itTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3status Tff7b72= Te6edf3takServerStatusTb4b4b4,
Te6edf3clientCount Tff7b72= Te6edf3takClientCountTb4b4b4,
Te6edf3onExport Tff7b72= Tb4b4b4{ Te6edf3exportLauncherTb4b4b4(Ta5d6ff"Ta5d6ffMeshtastic_TAK_Server.zipTa5d6ff"Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3TakMeshTestCardTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e/** Stateless TAK server enable/disable section β previewable without DI. */
Tf0883e@Composable
Tff7b72internal Tff7b72fun Td2a8ffTakServerSectionTb4b4b4(
Te6edf3isTakServerEnabledTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onEnabledChangeTb4b4b4: Tb4b4b4(Tffa657BooleanTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3isMeshToCotEnabledTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onMeshToCotChangeTb4b4b4: Tb4b4b4(Tffa657BooleanTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3statusTb4b4b4: Te6edf3TakServerStatusTb4b4b4,
Te6edf3clientCountTb4b4b4: Tffa657IntTb4b4b4,
Te6edf3onExportTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TitledCardTb4b4b4(Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_sectionTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3SwitchPreferenceTb4b4b4(
Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_enabledTb4b4b4)Tb4b4b4,
Te6edf3summary Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_enabled_descTb4b4b4)Tb4b4b4,
Te6edf3checked Tff7b72= Te6edf3isTakServerEnabledTb4b4b4,
Te6edf3enabled Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3onCheckedChange Tff7b72= Te6edf3onEnabledChangeTb4b4b4,
Tb4b4b4)
Te6edf3HorizontalDividerTb4b4b4(Tb4b4b4)
Te6edf3TakServerStatusRowTb4b4b4(Te6edf3status Tff7b72= Te6edf3statusTb4b4b4, Te6edf3clientCount Tff7b72= Te6edf3clientCountTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3isTakServerEnabledTb4b4b4) Tb4b4b4{
Te6edf3HorizontalDividerTb4b4b4(Tb4b4b4)
Te6edf3SwitchPreferenceTb4b4b4(
Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_mesh_to_cotTb4b4b4)Tb4b4b4,
Te6edf3summary Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_mesh_to_cot_descTb4b4b4)Tb4b4b4,
Te6edf3checked Tff7b72= Te6edf3isMeshToCotEnabledTb4b4b4,
Te6edf3enabled Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3onCheckedChange Tff7b72= Te6edf3onMeshToCotChangeTb4b4b4,
Tb4b4b4)
Te6edf3HorizontalDividerTb4b4b4(Tb4b4b4)
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff1T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceBetweenTb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3export_tak_data_packageTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4,
Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_export_data_package_descTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodySmallTb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariantTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onExportTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ShareTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3export_tak_data_packageTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72internal Tff7b72enum Tff7b72class T56d364TakServerStatus Tb4b4b4{
Te6edf3UnavailableTb4b4b4,
Te6edf3OffTb4b4b4,
Te6edf3StartingTb4b4b4,
Te6edf3WaitingForClientTb4b4b4,
Te6edf3ConnectedTb4b4b4,
Te6edf3FailedTb4b4b4,
Te6edf3NotRunningTb4b4b4,
Tb4b4b4;
Tff7b72companion Tff7b72object Tb4b4b4{
Tff7b72fun Td2a8ffresolveTb4b4b4(
Te6edf3isSupportedTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3isEnabledTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3isRunningTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3isStartingTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3clientCountTb4b4b4: Tffa657IntTb4b4b4,
Te6edf3hasStartErrorTb4b4b4: Tffa657BooleanTb4b4b4,
Tb4b4b4)Tb4b4b4: Te6edf3TakServerStatus Tff7b72= Tff7b72when Tb4b4b4{
Tff7b72!Te6edf3isSupported Tff7b72-Tff7b72> Te6edf3Unavailable
Tff7b72!Te6edf3isEnabled Tff7b72-Tff7b72> Te6edf3Off
Te6edf3hasStartError Tff7b72-Tff7b72> Te6edf3Failed
Te6edf3isStarting Tff7b72-Tff7b72> Te6edf3Starting
Te6edf3isRunning Tff7b72&Tff7b72& Te6edf3clientCount Tff7b72> T79c0ff0 Tff7b72-Tff7b72> Te6edf3Connected
Te6edf3isRunning Tff7b72-Tff7b72> Te6edf3WaitingForClient
Tff7b72else Tff7b72-Tff7b72> Te6edf3NotRunning
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffTakServerStatusRowTb4b4b4(Te6edf3statusTb4b4b4: Te6edf3TakServerStatusTb4b4b4, Te6edf3clientCountTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Tff7b72val Tb4b4b4(Te6edf3descriptionTb4b4b4, Te6edf3colorTb4b4b4) Tff7b72=
Tff7b72when Tb4b4b4(Te6edf3statusTb4b4b4) Tb4b4b4{
Te6edf3TakServerStatusTb4b4b4.Te6edf3Unavailable Tff7b72-Tff7b72>
Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_status_unavailableTb4b4b4) Te6edf3to Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariant
Te6edf3TakServerStatusTb4b4b4.Te6edf3Off Tff7b72-Tff7b72>
Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_status_offTb4b4b4) Te6edf3to Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariant
Te6edf3TakServerStatusTb4b4b4.Te6edf3Starting Tff7b72-Tff7b72>
Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_status_startingTb4b4b4) Te6edf3to Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariant
Te6edf3TakServerStatusTb4b4b4.Te6edf3WaitingForClient Tff7b72-Tff7b72>
Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_status_waitingTb4b4b4) Te6edf3to Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3primary
Te6edf3TakServerStatusTb4b4b4.Te6edf3Connected Tff7b72-Tff7b72>
Te6edf3pluralStringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3pluralsTb4b4b4.Te6edf3tak_server_status_connectedTb4b4b4, Te6edf3clientCountTb4b4b4, Te6edf3clientCountTb4b4b4) Te6edf3to
Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3primary
Te6edf3TakServerStatusTb4b4b4.Te6edf3Failed Tff7b72-Tff7b72>
Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_status_failedTb4b4b4) Te6edf3to Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3error
Te6edf3TakServerStatusTb4b4b4.Te6edf3NotRunning Tff7b72-Tff7b72>
Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_status_not_runningTb4b4b4) Te6edf3to Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariant
Tb4b4b4}
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff1T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3BoxTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff1T79c0ff0.Te6edf3dpTb4b4b4)Tb4b4b4.Te6edf3backgroundTb4b4b4(Te6edf3colorTb4b4b4, Te6edf3CircleShapeTb4b4b4)Tb4b4b4)
Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3start Tff7b72= T79c0ff1T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_statusTb4b4b4)Tb4b4b4, Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3descriptionTb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodySmallTb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariantTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e// ββ Debug-only TAK Mesh Test Card ββββββββββββββββββββββββββββββββββββββββββββ
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffTakMeshTestCardTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3buildConfigTb4b4b4: Te6edf3BuildConfigProvider Tff7b72= Te6edf3koinInjectTb4b4b4(Tb4b4b4)
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3buildConfigTb4b4b4.Te6edf3isDebugTb4b4b4) Tff7b72return
Tff7b72val Te6edf3takMeshIntegrationTb4b4b4: Te6edf3TAKMeshIntegration Tff7b72= Te6edf3koinInjectTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3testRunner Tff7b72= Te6edf3remember Tb4b4b4{ Te6edf3TakMeshTestRunnerTb4b4b4(Te6edf3takMeshIntegrationTb4b4b4) Tb4b4b4}
Tff7b72val Te6edf3results Tff7b72by Te6edf3testRunnerTb4b4b4.Te6edf3resultsTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3isRunning Tff7b72by Te6edf3testRunnerTb4b4b4.Te6edf3isRunningTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3currentFixture Tff7b72by Te6edf3testRunnerTb4b4b4.Te6edf3currentFixtureTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3scope Tff7b72= Te6edf3rememberCoroutineScopeTb4b4b4(Tb4b4b4)
Te6edf3TakMeshTestCardContentTb4b4b4(
Te6edf3results Tff7b72= Te6edf3resultsTb4b4b4,
Te6edf3isRunning Tff7b72= Te6edf3isRunningTb4b4b4,
Te6edf3currentFixture Tff7b72= Te6edf3currentFixtureTb4b4b4,
Te6edf3fixtureCount Tff7b72= Te6edf3TakMeshTestRunnerTb4b4b4.Te6edf3FIXTURE_NAMESTb4b4b4.Te6edf3sizeTb4b4b4,
Te6edf3onRunTests Tff7b72= Tb4b4b4{ Te6edf3scopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3testRunnerTb4b4b4.Te6edf3runAllTb4b4b4(Tb4b4b4) Tb4b4b4} Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
T8b949e/** Stateless TAK test results card β previewable without DI. */
Tf0883e@Composable
Tff7b72internal Tff7b72fun Td2a8ffTakMeshTestCardContentTb4b4b4(
Te6edf3resultsTb4b4b4: Te6edf3ListTff7b72<Te6edf3TakTestResultTff7b72>Tb4b4b4,
Te6edf3isRunningTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3currentFixtureTb4b4b4: Tffa657String?Tb4b4b4,
Te6edf3fixtureCountTb4b4b4: Tffa657IntTb4b4b4,
Te6edf3onRunTestsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3loadingLabel Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_loadingTb4b4b4)
Tff7b72val Te6edf3v2Results Tff7b72= Te6edf3resultsTb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3protocol Tff7b72=Tff7b72= Te6edf3TakProtocolTb4b4b4.Te6edf3V2 Tb4b4b4}
Tff7b72val Te6edf3v1Results Tff7b72= Te6edf3resultsTb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3protocol Tff7b72=Tff7b72= Te6edf3TakProtocolTb4b4b4.Te6edf3V1 Tb4b4b4}
Te6edf3TitledCardTb4b4b4(Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_test_card_titleTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff1T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceBetweenTb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3isRunningTb4b4b4) Tb4b4b4{
Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_test_runningTb4b4b4, Te6edf3currentFixture Tff7b72?: Te6edf3loadingLabelTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_test_idleTb4b4b4, Te6edf3fixtureCountTb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3isRunningTb4b4b4) Tb4b4b4{
Te6edf3CircularProgressIndicatorTb4b4b4(Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3ButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onRunTestsTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3PlayArrowTb4b4b4, Te6edf3contentDescription Tff7b72= Tff7b72nullTb4b4b4)
Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_test_runTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3v2ResultsTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TakProtocolResultsSectionTb4b4b4(
Te6edf3titleRes Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_test_protocol_v2_labelTb4b4b4,
Te6edf3results Tff7b72= Te6edf3v2ResultsTb4b4b4,
Te6edf3fixtureCount Tff7b72= Te6edf3fixtureCountTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3v1ResultsTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TakProtocolResultsSectionTb4b4b4(
Te6edf3titleRes Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_test_protocol_v1_labelTb4b4b4,
Te6edf3results Tff7b72= Te6edf3v1ResultsTb4b4b4,
Te6edf3fixtureCount Tff7b72= Te6edf3fixtureCountTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e/**
* One protocol's fixture run within the TAK self-test card: a summary line (passed / expected-limitation drops /
* unexpected failures) followed by the per-fixture rows. Expected v1 schema drops are surfaced distinctly from real
* failures so a low v1 pass rate reads as intentional legacy-schema behavior, not a self-test regression.
*/
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffTakProtocolResultsSectionTb4b4b4(Te6edf3titleResTb4b4b4: Te6edf3StringResourceTb4b4b4, Te6edf3resultsTb4b4b4: Te6edf3ListTff7b72<Te6edf3TakTestResultTff7b72>Tb4b4b4, Te6edf3fixtureCountTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3passed Tff7b72= Te6edf3resultsTb4b4b4.Te6edf3count Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3passed Tb4b4b4}
Tff7b72val Te6edf3expectedDrops Tff7b72= Te6edf3resultsTb4b4b4.Te6edf3count Tb4b4b4{ Tff7b72!Tffa657itTb4b4b4.Te6edf3passed Tff7b72&Tff7b72& Tffa657itTb4b4b4.Te6edf3expectedDrop Tb4b4b4}
Tff7b72val Te6edf3unexpectedFailed Tff7b72= Te6edf3resultsTb4b4b4.Te6edf3count Tb4b4b4{ Tff7b72!Tffa657itTb4b4b4.Te6edf3passed Tff7b72&Tff7b72& Tff7b72!Tffa657itTb4b4b4.Te6edf3expectedDrop Tb4b4b4}
Te6edf3Column Tb4b4b4{
Te6edf3HorizontalDividerTb4b4b4(Tb4b4b4)
Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3titleResTb4b4b4)Tb4b4b4, Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3titleSmallTb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72=
Te6edf3stringResourceTb4b4b4(
Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_test_results_v2Tb4b4b4,
Te6edf3passedTb4b4b4,
Te6edf3expectedDropsTb4b4b4,
Te6edf3unexpectedFailedTb4b4b4,
Te6edf3resultsTb4b4b4.Te6edf3sizeTb4b4b4,
Te6edf3fixtureCountTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodySmallTb4b4b4,
Te6edf3color Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3unexpectedFailed Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3error
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariant
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tff7b72for Tb4b4b4(Te6edf3result Tff7b72in Te6edf3resultsTb4b4b4) Tb4b4b4{
Te6edf3HorizontalDividerTb4b4b4(Tb4b4b4)
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceBetweenTb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3resultTb4b4b4.Te6edf3fixtureNameTb4b4b4.Te6edf3removeSuffixTb4b4b4(Ta5d6ff"Ta5d6ff.xmlTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodySmallTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72=
Tff7b72when Tb4b4b4{
Te6edf3resultTb4b4b4.Te6edf3passed Tff7b72-Tff7b72>
Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_test_result_bytesTb4b4b4, Te6edf3resultTb4b4b4.Te6edf3compressedBytesTb4b4b4)
Te6edf3resultTb4b4b4.Te6edf3expectedDrop Tff7b72-Tff7b72> Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_test_result_expected_dropTb4b4b4)
Tff7b72else Tff7b72-Tff7b72> Te6edf3resultTb4b4b4.Te6edf3error Tff7b72?: Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3tak_server_test_result_unknown_errorTb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodySmallTb4b4b4,
Te6edf3color Tff7b72=
Tff7b72when Tb4b4b4{
Te6edf3resultTb4b4b4.Te6edf3passed Tff7b72-Tff7b72> Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3primary
Te6edf3resultTb4b4b4.Te6edf3expectedDrop Tff7b72-Tff7b72> Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariant
Tff7b72else Tff7b72-Tff7b72> Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3error
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.12s